home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / tess_a.arc / TESSPARK.ASM < prev    next >
Assembly Source File  |  1989-05-12  |  9KB  |  285 lines

  1.         PAGE 60,132
  2.         TITLE TESSPARK.ASM -- TesSeRact Demo program to park disk drive heads
  3. ;----------------------------------------------------------------------------
  4. SUBTTL  TesSeRact Revision Level 1
  5. ;-----------------------------------------------------------------------------
  6. ;   TesSeRact(tm) -- A Library of Routines for Creating Ram-Resident (TSR)
  7. ;                    programs for the IBM PC and compatible Personal
  8. ;                    Computers.
  9. ;
  10. ;The software, documentation and source code are: 
  11. ;       Copyright (C) 1986, 1987, 1988 Tesseract Development Team
  12. ;       All Rights Reserved 
  13. ;       c/o Chip Rabinowitz
  14. ;       Innovative Data Concepts
  15. ;       2084 Woodlawn Avenue
  16. ;       Glenside, PA 19038
  17. ;       1-215-884-3373
  18. ;
  19. ;-----------------------------------------------------------------------------
  20. ;   This product supports the TesSeRact Standard for Ram-Resident Program 
  21. ;   Communication.  For information about TesSeRact, contact the TesSeRact 
  22. ;   Development Team at:
  23. ;       Compuserve:    70731,20
  24. ;       MCIMAIL:       315-5415
  25. ;   This MCIMAIL Account has been provided to the TesSeRact Development
  26. ;   Team by Borland International, Inc.  The TesSeRact Development Team
  27. ;   is in no way associated with Borland International, Inc.
  28. ;-----------------------------------------------------------------------------
  29. ;
  30. ; BASED on code originally provided by Jim Mischel
  31. ;
  32. ; ORIGINAL COPYRIGHT NOTICE:
  33. ;
  34. ;;;; AUTOPARK.ASM - program to automatically park the disk drive heads
  35. ;;;; at specified time intervals.
  36. ;;;;
  37. ;;;; Copyright (c) 1988, Jim Mischel
  38. ;;;;
  39. ;;;;
  40. ;;;; This program has been assembled using MASM 5.0.  Changes may be required for
  41. ;;;; use with earlier versions.
  42. ;;;;
  43. ;;;; To build:
  44. ;;;;    MASM AUTOPARK ;
  45. ;;;;    LINK AUTOPARK ;
  46. ;;;;    EXE2BIN AUTOPARK AUTOPARK.COM
  47.  
  48. ;
  49. ; To assemble this TesSeRact version:
  50. ;
  51. ;       MASM TESSPARK;
  52. ;       LINK TESS_ASM+TESS_BP+TESSPARK+TESS_END,TESSPARK;
  53. ;       EXE2BIN TESSPARK.EXE TESSPARK.COM
  54. ;
  55.  
  56. .model small
  57.  
  58. .code
  59.  
  60. ; wait_count is # of timer ticks to wait between the last disk access
  61. ; and parking the disk.  Each tick is approximately 1/18.2 seconds.
  62. ; Maximum wait count is 65536 ticks (0), which is darn close to 1 hour.
  63. ;
  64. wait_count      equ     1092            ;1 minute
  65. ;wait_count     equ     192             ;10 seconds (for testing)
  66.  
  67.  
  68. speaker_beep    equ     1               ;sound TESSBEEP if set
  69.  
  70. tick_count      dw      ?
  71.  
  72. ;
  73. ; This routine attempts to park the disk.
  74. ; Returns with carry set if park was unsuccessful.
  75. ;
  76. ; I'm not real clear on all the details here.  I disassembled this from a
  77. ; park program I've been using.  It will park the heads on all hard disks.
  78. ; It's using some undocumented (or not very well documented) features of the
  79. ; AT BIOS.  From looking at the code, I'd say it doesn't work on XT's, but
  80. ; when run, it seems to work fine.
  81. ;
  82. parkit  proc    near
  83.         mov     si,0080h
  84. pk0:    mov     ah,08h
  85.         mov     dx,si                   ;DX is drive ID
  86.         int     13h                     ;get drive parameters
  87.         add     dl,30h
  88.         xor     dh,dh                   ;This is going to tell
  89.         add     dx,4fh                  ;us whether we've got an AT
  90.         mov     di,dx                   ;save drive count
  91.         cmp     di,0080h
  92.         jb      pkdone                  ;< 0080 means it's an XT
  93.         inc     ch                      ;CH is tracks + 1
  94.         jnb     pk1
  95.         add     cl,40h                  ;CL is sectors
  96. pk1:    mov     ax,0c01h                ;seek to cylinder
  97.         mov     dx,si                   ;DX is drive ID
  98.         int     13h                     ;this does the seek
  99.         inc     si                      ;bump drive count
  100.         cmp     si,di
  101.         jbe     pk0                     ;loop until all drives are parked
  102. pkdone:
  103. if speaker_beep
  104. EXTRN TESSBEEP:NEAR
  105.  
  106.         call    TESSBEEP
  107. endif
  108.         ret
  109. parkit  endp
  110.  
  111. ;
  112. ; TesSeRact Entry Points
  113. ;
  114. ;
  115. PUBLIC  TSRUSERPROC, TSRTIMERPROC, TSRBACKCHECK, TSRMAIN, TSRBACKPROC
  116. PUBLIC  TSRCLEANUP
  117.  
  118. ;
  119. ; These are NULL procedures.  We don't service them in this program
  120. ;
  121. ;
  122. TSRUSERPROC:
  123. TSRMAIN:
  124.         ret
  125.  
  126. MyParms dw      0                       ;saved location of INT 13 flag 
  127.                                         ;  from TesSeRact data area
  128.  
  129. do_park db      0                       ;flag set when we want to park
  130.  
  131. TSRBACKCHECK proc near
  132.         assume cs:_TEXT, ds:_TEXT
  133.  
  134.         mov     al,do_park              ;do we want to park the disk?
  135.         xor     ah,ah                   ;if non-zero, yes!
  136.         ret
  137. TSRBACKCHECK endp
  138.  
  139. TSRBACKPROC proc near
  140.         assume cs:_TEXT, ds:_TEXT
  141.  
  142.         call    near ptr parkit         ;attempt to park it
  143.         mov     do_park,0
  144.         mov     bx,[MyParms]
  145.         mov     word ptr [tick_count],wait_count        ;restart wait
  146.         mov     byte ptr [bx],0
  147.  
  148.         ret
  149. TSRBACKPROC endp
  150.  
  151. TSRCLEANUP proc near
  152.         assume cs:_TEXT, ds:_TEXT
  153.  
  154.         or      ax,ax
  155.         jnz     clean_term
  156.  
  157. clean_init:
  158. ;
  159. ;  Please note that the data area returned by this function is also available
  160. ;    as the TESS_GLOBALS public symbol.
  161. ;
  162.         mov     cx,ParkNum
  163.         mov     bx,4h                   ;in data area
  164.         mov     ax,5453h
  165.         int     2fh
  166.  
  167.         add     bx,3h                   ;add in offset we want (Was13)
  168.  
  169.         mov     MyParms,bx              ;since we know segment is our's
  170.                                         ;we don't need to worry about it!
  171.  
  172. clean_term:                             ;nothing needed to terminate!
  173. clean_out:
  174.         ret
  175.  
  176. TSRCLEANUP endp
  177.  
  178.  
  179. TSRTIMERPROC proc near
  180.         assume cs:_TEXT, ds:_TEXT
  181.  
  182.         mov     bx,[MyParms]
  183.         cmp     byte ptr [bx],1
  184.         jne     no_park
  185. no_disk:
  186.         mov     [do_park],0
  187.         dec     word ptr [tick_count]
  188.         jnz     no_park
  189.  
  190.         mov     [do_park],1
  191. clear_it:
  192.         mov     word ptr [tick_count],wait_count        ;restart wait
  193.         mov     byte ptr [bx],0                         ;clear flag
  194. no_park:
  195.         ret
  196.  
  197. TSRTIMERPROC endp
  198.  
  199. ;
  200. ; If AUTOPARK already installed, display error message and exit.
  201. ; If not installed, attempt to park the disks and install the resident
  202. ; portion.
  203. ;
  204. EXTRN TSDOINIT:NEAR
  205. EXTRN TSCHECKRESIDENT:near
  206. EXTRN TSSETSTACK:near
  207.  
  208. ParkNum         dw 0                    ;our ID number
  209. ParkName        db 'TESSPARK',0         ;our Identification string
  210.  
  211. public mystack
  212. public topstack
  213.  
  214. mystack         db 512 dup(0)           ;stack to use
  215.  
  216. topstack        equ this byte
  217.  
  218. PUBLIC TESSINITSTART                    ;required entry point
  219.  
  220. TESSINITSTART:
  221.         assume cs:_TEXT, ds:_TEXT
  222.  
  223.         mov     dx,offset signon
  224.         mov     ah,09
  225.         int     21h                     ;display the signon message
  226.  
  227.         mov     si,offset ParkName
  228.         mov     di,offset ParkNum
  229.         call    TSCHECKRESIDENT
  230.  
  231.         or      ax,ax
  232.         jz      do_install
  233.  
  234.         mov     dx,offset already_installed     ;we must already be installed
  235.         mov     ah,09
  236.         int     21h                     ;display message
  237. term_it:
  238.         mov     ax,4c01h
  239.         int     21h                     ;and exit with error code
  240.  
  241. do_install:
  242.         mov     di,offset topstack
  243.         dec     di
  244.         dec     di
  245.         mov     si,di
  246.         call    TSSETSTACK
  247.  
  248.         call    near ptr parkit         ;attempt to park disk
  249.         jmp     short inst1
  250.  
  251. inst1:
  252.         mov     word ptr cs:[tick_count],wait_count     ;start wait
  253. ;
  254. ; display installed message and exit
  255. ;
  256.         mov     dx,offset installed
  257.         mov     ah,09
  258.         int     21h
  259.  
  260.         mov     dx,offset TESSINITSTART
  261.         mov     bx,1060h                ;no pop graphics, timer proc and
  262.                                         ;    background procs only
  263.         xor     ax,ax                   ;no hotkey!
  264.         dec     ax                      ;no hotkey is -1
  265.  
  266.         call    TSDOINIT
  267.         jmp     term_it                 ;we should never do this!
  268.  
  269. signon  db      13,10,'TESSPARK.COM Version 1.0, Copyright (c) '
  270.         db      '1988, TesSeRact(tm) Development Team',13,10
  271.         db      'All Rights Reserved',13,10,10
  272.         db      'Based on Original Code provided by Jim Mischel:',13,10
  273.         db      '   AUTOPARK 1.0  Copyright (c) 1988, Jim Mischel',13,10,'$'
  274. installed       label   byte
  275.         db      'TESSPARK installed',13,10,'$'
  276. already_installed       label   byte
  277.         db      'TESSPARK already installed',7,13,10,'$'
  278.  
  279. _TEXT ends
  280.  
  281.         END
  282.